<?php
declare (strict_types=1);

namespace app\serviceapp;

use app\extend\image\Image;
use app\traits\ServiceTrait;
use app\service\AuthGroupService;
use app\util\CosHelper;
use app\util\Tools;
use think\facade\Db;

/**
 * 上传
 * Class UploadService
 * @package app\service
 */
class UploadService
{
    /**
     * 上传
     */
    public static function upload($upload_type, $file)
    {
        set_time_limit(0);
        $zip_size = 5 * 1024 * 1024;
        $max_size = 10 * 1024 * 1024;
        $type_arr = ['image/png', 'image/jpg', 'image/jpeg', 'image/gif'];
        if ($upload_type == "base64") {
            $base64_data = $file;

            if (!preg_match('/^(data:\s*(image\/\w+);base64,)/', $base64_data, $result)) {
                return json_error(100, "图片数据不是base64格式");
            }
            $file_type = $result[2];
            if (!in_array($file_type, $type_arr)) {
                return json_error(100, '图片格式不正确，只允许jpg,jpeg,png或gif格式');
            }

            $file_data = base64_decode(str_replace($result[1], '', $base64_data)); //去掉data:image/jpeg;base64,
            if ($file_data === false) {
                //解码失败
                return json_error(100, "解码base64图片数据失败");
            }
            if (strlen($file_data) <= 0) {
                return json_error(100, '文件大小不能为空');
            }
            if (strlen($file_data) > $max_size) {
                return json_error(100, '图片大小不能超过10Mb');
            }

            $file_path = getSavePath();
            $len = file_put_contents($file_path, $file_data);

            if (!$len) {
                return json_error(200, "写入图片数据失败");
            }
            $ret = CosHelper::upload($file_path);
            @unlink($file_path);
        } else {
            if (empty($file)) {
                return json_error(100, '请选择要上传的图片');
            }
            $file_type = strtolower($file['type']);
            if (!in_array($file_type, $type_arr)) {
                return json_error(100, '图片格式不正确，只允许jpg,jpeg,png或gif格式');
            }
            if ($file['size'] <= 0) {
                return json_error(100, '文件大小不能为空');
            }
            if ($file['size'] > $max_size) {
                return json_error(100, '图片大小不能超过10Mb');
            }

            switch ($file['type']) {
                case  'image/jpeg':
                    $fileType = 'jpeg';
                    break;
                case 'image/png':
                    $fileType = 'png';
                    break;
                default:
                    $fileType = 'jpg';
            }
            if ($file["size"] > $zip_size) {
                //进行图片压缩
                $file_path = getSavePath($file["tmp_name"], $fileType);
                $image = Image::open($file["tmp_name"]);
                $image->thumb(640, 972)->save($file_path);

                $ret = CosHelper::upload($file_path);
                //@unlink($file_path);
            } else {
                $file_path = getSavePath($file["tmp_name"], $fileType);
                if (!move_uploaded_file($file["tmp_name"], $file_path)) {
                    return json_error(200, '保存文件失败');
                }
                $ret = CosHelper::upload($file_path);
                //@unlink($file_path);
            }
            Tools::addLog("upload", "file:" . json_encode($file, JSON_UNESCAPED_UNICODE) . ",res:" . json_encode($ret, JSON_UNESCAPED_UNICODE));
        }
        return json($ret);
    }
}
